home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_asm / objxref / xrdisk.asm < prev    next >
Assembly Source File  |  1986-04-26  |  3KB  |  142 lines

  1.  PAGE    81,128
  2.  TITLE    XRDISK    - Output array to disk file
  3.  SUBTTL    V1.0 - May 1986    - Cross    Reference Facility
  4. ;
  5. ;=============================================================================|
  6. ;         Copyright 1986 - Dan Daetwyler - Springdale, AR 72764          |
  7. ;=============================================================================|
  8.     .SALL
  9. ;
  10. DATA    SEGMENT    BYTE PUBLIC 'DATA'
  11. ;
  12.     EXTRN    FHAN:WORD,MPUBN:BYTE,MPCNT:WORD,MEXTN:BYTE
  13. ;
  14. FLAG    DW    -1
  15. TBLEN    DW    ?
  16. ;
  17. EMSG    DB    13,10,'Write failure on output file$'
  18. ;
  19. DATA    ENDS
  20. ;
  21. CODE    SEGMENT    BYTE PUBLIC 'CODE'
  22.     ASSUME    CS:CODE,DS:DATA,ES:DATA
  23. ;
  24. ;==============================================================================
  25. ; Entry    Point    XRDISK                                  |
  26. ;==============================================================================
  27. ;                                          |
  28. ; This procedure forms the cross ref array into    a disk file.  The array          |
  29. ; format of the    file has a complete table of the public    names associated      |
  30. ; with an offset in the    file to    the entries for    that name.  This array is     |
  31. ; prefixed by a    word giving the    length of the table (maximum entries=1000).   |
  32. ; Its form is name length (byte), name (byte string max    of 12),              |
  33. ; and offset (word).  Following    this entry is the individual entries for      |
  34. ; each name.  The individual entries follow the    form: length of    module          |
  35. ; name (byte), module name (byte string),and repetitive    external references   |
  36. ; each having the form length of name (byte), name (byte string).  The end    |
  37. ; of an    individual entry is flagged by a word of 0FFFFH.              |
  38. ;                                          |
  39. ; Entry    conventions:    None.                              |
  40. ;                                          |
  41. ; Returns:        None.                              |
  42. ;                                          |
  43. ;==============================================================================
  44. ;
  45.     EXTRN    XRSRCH:NEAR
  46. ;
  47.     PUBLIC    XRDISK
  48. ;
  49. XRDISK    PROC    NEAR
  50.     MOV    SI,OFFSET MPUBN        ;  and point to    start of stack
  51.     MOV    AX,MPCNT        ;Load count of entries
  52.     ADD    AX,AX
  53.     ADD    AX,AX
  54.     ADD    AX,AX
  55.     ADD    AX,AX            ;* 16
  56.     MOV    TBLEN,AX        ;Save table length
  57.     MOV    AX,2
  58.     MOV    DX,OFFSET TBLEN
  59.     CALL    WRITE
  60.     MOV    CX,TBLEN
  61.     MOV    DX,OFFSET MPUBN
  62.     MOV    AH,40H
  63.     MOV    BX,FHAN
  64.     INT    21H            ;Do dummy write    of table
  65.     MOV    CX,MPCNT
  66. LP:    MOV    BX,WORD    PTR [SI+14]    ;Point to module name
  67.     CALL    WHERE            ;Get current seek location
  68.     PUSH    AX
  69.     MOV    AL,BYTE    PTR [BX]    ;Get name length
  70.     XOR    AH,AH
  71.     MOV    DX,BX
  72.     INC    AX
  73.     CALL    WRITE            ;Write public module name
  74.     POP    AX            ;Get current seek location
  75.     MOV    WORD PTR [SI+14],AX
  76.     MOV    DI,OFFSET MEXTN
  77. XLP:    CALL    XRSRCH            ;Search    for externals
  78.     JC    DONE
  79.     MOV    AL,BYTE    PTR [BX]    ;Load length of    extrnal    name
  80.     XOR    AH,AH
  81.     INC    AX
  82.     MOV    DX,BX
  83.     CALL    WRITE
  84.     ADD    DI,15
  85.     JMP    XLP
  86. DONE:    MOV    AX,2
  87.     MOV    DX,OFFSET FLAG
  88.     CALL    WRITE
  89.     ADD    SI,16
  90.     LOOP    LP
  91.     MOV    DX,2
  92.     XOR    CX,CX
  93.     MOV    AX,4200H
  94.     MOV    BX,FHAN
  95.     INT    21H            ;Seek to start of file
  96.     MOV    DX,OFFSET MPUBN
  97.     MOV    CX,TBLEN
  98.     MOV    AH,40H
  99.     INT    21H            ;Write table to    beginning of file
  100.     MOV    AH,3EH
  101.     INT    21H            ;Close file
  102.     RET
  103. XRDISK    ENDP
  104. ;
  105. WHERE    PROC    NEAR
  106.     PUSH    DX
  107.     PUSH    CX
  108.     PUSH    BX
  109.     XOR    CX,CX
  110.     MOV    DX,CX
  111.     MOV    BX,FHAN
  112.     MOV    AX,4201H
  113.     INT    21H
  114.     POP    BX
  115.     POP    CX
  116.     POP    DX
  117.     RET
  118. WHERE    ENDP
  119. ;
  120. WRITE    PROC    NEAR
  121.     PUSH    CX
  122.     PUSH    BX
  123.     MOV    BX,FHAN
  124.     MOV    CX,AX
  125.     MOV    AH,40H
  126.     INT    21H
  127.     CMP    AX,CX
  128.     JNE    WFAIL
  129.     POP    BX
  130.     POP    CX
  131.     RET
  132. WFAIL:    MOV    DX,OFFSET EMSG
  133.     MOV    AH,9
  134.     INT    21H
  135.     MOV    AX,4C04H
  136.     INT    21H
  137. WRITE    ENDP
  138. ;
  139. CODE    ENDS
  140. ;
  141.     END
  142.